/**
 * slkLni
 *   实现json,lua.Table,Lni3种格式的转换过程
 *   读取Lni和Table解析为json,
 *   JSON<->Lua.Table<->Lni
 */
class slkLni {

    /**
     * 
     * @param [
     *    {
     *       name:"xx",
     *       fields:{
     *          "a":"b"    
     *      }
     *    }
     * ] data 
     */
    // data:[]
    constructor(data = []) {
        this.jsonRead(data);
    }

    init() {
        this.data = []
    }
    /**
     * json->
     */
    jsonRead(data = []) {
        if (Array.isArray(data)) {
            this.data = data;
        }
    }
    /**
     * Lni->json
     * w3x2lni的格式
     */
    LniRead(lniString) {
        this.data = [];
        let name = "";
        let fieldStatus = ""; //index,name,value
        let fieldName = "";
        let fieldValue = "";
        let fields = {};
        //去掉注释
        lniString = this.removeComments(lniString);
        lniString.forEach((s, i) => {
            if (i == lniString.length - 1) {
                //最后一个
                this.data.push({
                    name:name,
                    fields:fields
                });

            } else {
                switch (s) {
                    case "[":
                        //检查是否有数据
                        if(name){
                            this.data.push({
                                name:name,
                                fields:fields
                            });
                        }
                        //初始化
                        name = "";
                        fieldStatus = "index";
                        fieldName = "";
                        fieldValue = "";
                        fields = {};
                        break;
                    case "]":
                        fieldStatus = "name";
                        break;
                    case "=":
                        fieldStatus = "value";
                        break;
                    case `"`: case `'`:
                        //字符串属性
                        break;
                    case "\n":
                        if (fieldStatus == "value") {
                            if(fieldName){
                                //压入字段
                                fields[fieldName] = this.toNumber(fieldValue);
                            }
                            fieldStatus = "name";

                            fieldName = "";
                            fieldValue = "";
                        }
                        break;
                    default:
                        if (!this.isSpace(s)) {
                            if (fieldStatus == "index") {
                                name += s;
                            } else if (fieldStatus == "name") {
                                fieldName += s;
                            } else if (fieldStatus == "value") {
                                fieldValue += s;
                            }
                        }
                }
            }
        })
    }

    /**
     * Lua.Table->json
     * lua格式为
     * 多个大括号
     */
    luaRead(luaString) {
        this.data = [];
        let index = 0;
        let name = "";
        let fieldStatus = ""; //name,value
        let fieldValueString = false; //是否在字符串中 逗号
        let fieldName = "";
        let fieldValue = "";
        let fields = {};
        //去掉注释
        luaString = this.removeComments(luaString);
        luaString.forEach((s,i) => {
            switch (s) {
                case "{":
                    //初始化
                    name = "temp" + index;
                    fieldStatus = "name";
                    fieldName = "";
                    fieldValue = "";
                    fields = {};
                    break;
                case "}":
                    //压入数据
                    this.data.push({
                        name: name,
                        fields: fields
                    })
                    index = index + 1;
                    break;
                case "=":
                    fieldStatus = "value";
                    break;
                case ",":
                    //检查是否最后
                    if(!fieldValueString){
                        //压入字段
                        if(fieldName){
                            fields[fieldName] = this.toNumber(fieldValue);
                        }
                        fieldStatus = "name";
                        fieldName = "";
                        fieldValue = "";
                    }else{
                        fieldValue += s;
                    }
                    break;
                case `"`: case `'`:
                    //字符串属性
                    fieldValueString = !fieldValueString;
                    break;
                default:
                    if (!this.isSpace(s)) {
                        if (fieldStatus == "name") {
                            fieldName += s;
                        } else if (fieldStatus == "value") {
                            fieldValue += s;
                        }
                    }
            }
        })
    }

    /**
     * json->Lni
     */
    LniWrite() {
        //遍历josn生成lua->table
        let lniListString = "";
        this.data.forEach(item => {
            let name = item.name;
            let fields = item.fields;
            let lniString = this.lniTemplate();
            lniString = lniString.replace("$name$", name);
            let lniFieldsString = "";
            Object.keys(item.fields).forEach(fieldK => {
                let fieldV = item.fields[fieldK];
                lniFieldsString += "\n";
                lniFieldsString += this.isNumber(fieldV)
                    ? `${fieldK} = ${fieldV}`
                    : `${fieldK} = "${fieldV}"`
            })
            if (lniFieldsString) {
                lniString = lniString.replace("$fields$", lniFieldsString)
            }
            lniListString += lniString;
            lniListString += "\n";
        })
        return lniListString;
    }

    /**
     * json->Lua.table
     */
    luaWrite() {
        //遍历josn生成lua->table
        let luaTableString = "";
        this.data.forEach(item => {
            let name = item.name;
            let luaString = this.luaTemplate();
            luaString = luaString.replace("$name$", name);
            let luaFieldsString = "";
            Object.keys(item.fields).forEach(fieldK => {
                let fieldV = item.fields[fieldK];

                luaFieldsString += "\n";
                luaFieldsString += this.isNumber(fieldV)
                    ? `${fieldK} = ${fieldV}`
                    : `${fieldK} = "${fieldV}"` 
            })
            if (luaFieldsString) {
                luaString = luaString.replace("$fields$", luaFieldsString)
                luaTableString += luaString;
                luaTableString += "\n";
            }
        })
        return luaTableString;
    }

    luaTemplate() {
        return `
--$name$
{
    $fields$
}`
    }
    lniTemplate() {
        return `
[$name$]
$fields$`
    }
    /**
     * ->json
     */
    jsonWrite() {
        return this.data;
    }
    isSpace(s) {
        return s.match(/\s/);
    }
    isNumber(v) {
        let t = parseFloat(v);
        return typeof t == "number" && !isNaN(t);
    }
    toNumber(v){
        if(this.isNumber(v)){
            return v.includes(".") ? parseFloat(v) : parseInt(v) 
        }
        return v;
    }
    removeComments(content) {
        //检查是否包含注释
        //--开始后面的全部删除
        let result = [];
        if (content.includes("--")) {
            let conLines = content.split("\n");
            conLines.forEach(line => {
                if (line.includes("--")) {
                    if (line[0] == '-') {
                        //整行注释 忽略
                    } else if (line[0] != "-") {
                        //行尾注释  a=b, --xx
                        let temp = line.split("--");
                        result.push(temp[0]);
                    }
                } else {
                    result.push(line);
                }
            })
        }
        //字符串转数组
        return result.join("\n").split('');
    }
}

//测试数据
const l = function (...msg) {
    console.log(msg);
}

const log = function (msg) {
    console.log(JSON.stringify(msg, " ", 2));
}

let slkInstance = new slkLni();


let lniString = `
[AAns]
-- 影响区域
Area = 0.0
-- 图标 - 普通
Art = "ReplaceableTextures\\CommandButtons\\BTNReturnGoods.blp"
-- 魔法效果
BuffID = ""
-- 按钮位置 - 普通 (X)
Buttonpos_1 = 0
-- 按钮位置 - 普通 (Y)
Buttonpos_2 = 0
-- 魔法施放时间
Cast = 0.0
-- 效果 - 施法者 - 附加数量
Casterattachcount = 0
-- 魔法施放时间间隔
Cool = 0.0
-- 魔法消耗
Cost = 0
-- 黄金消耗
DataA = 50
-- 木材消耗
DataB = 0
-- 基础命令ID
DataE = "neutralspell"
-- 向技能拥有者收费
DataF = 1
-- 持续时间 - 普通
Dur = 0.0
-- 区域持续效果
EfctID = ""
-- 持续时间 - 英雄
HeroDur = 0.0
-- 热键 - 普通
Hotkey = "G"
-- 效果 - 射弹自导允许
MissileHoming = 0
-- 效果 - 射弹弧度
Missilearc = 0.0
-- 效果 - 射弹速度
Missilespeed = 0
-- 名字
Name = "收费"
-- 按钮位置 - 研究 (X)
Researchbuttonpos_1 = 0
-- 按钮位置 - 研究 (Y)
Researchbuttonpos_2 = 0
-- 施法距离
Rng = 0.0
-- 效果 - 目标 - 附加数量
Targetattachcount = 0
-- 提示工具 - 普通
Tip = "收费( |cffffcc00G|r)"
-- 提示工具 - 普通 - 扩展
Ubertip = "向某个玩家收取固定数额的金子和木材。"
-- 按钮位置 - 关闭 (X)
UnButtonpos_1 = 0
-- 按钮位置 - 关闭 (Y)
UnButtonpos_2 = 0
-- 检查等价所属
checkDep = 1
-- 英雄技能
hero = 0
-- 物品技能
item = 0
-- 跳级要求
levelSkip = 0
-- 等级
levels = 1
-- 魔法偷取优先权
priority = 0
-- 种族
race = "creeps"
-- 等级要求
reqLevel = 0
-- 目标允许
targs = ""
`;


// slkInstance.LniRead(lniString);
// log(slkInstance.data);


let lniString2 = `
[AEsd]
-- 名字(编辑器)
EditorName = "群星坠落(目标)"
-- 效果 - 射弹自导允许
MissileHoming = 0
-- 效果 - 射弹弧度
Missilearc = 0.0
-- 效果 - 射弹速度
Missilespeed = 0
-- 效果显示需求
Spelldetail = 0
-- 效果 - 目标
TargetArt = "Abilities\\Spells\\NightElf\\Starfall\\StarfallTarget.mdl"
-- 效果 - 目标附加点1
Targetattach = "origin"
-- 效果 - 目标 - 附加数量
Targetattachcount = 0
-- 是区域效果
isEffect = 0
-- 种族
race = "nightelf"

[AEtr]
-- 名字(编辑器)
EditorName = "宁静(目标)"
-- 效果 - 射弹自导允许
MissileHoming = 0
-- 效果 - 射弹弧度
Missilearc = 0.0
-- 效果 - 射弹速度
Missilespeed = 0
-- 效果显示需求
Spelldetail = 0
-- 效果 - 目标
TargetArt = "Abilities\\Spells\\NightElf\\Tranquility\\TranquilityTarget.mdl"
-- 效果 - 目标 - 附加数量
Targetattachcount = 0
-- 是区域效果
isEffect = 0
-- 种族
race = "nightelf"

[ANmd]
-- 名字(编辑器)
EditorName = "季风"
-- 效果 - 射弹自导允许
MissileHoming = 0
-- 效果 - 射弹弧度
Missilearc = 0.0
-- 效果 - 射弹速度
Missilespeed = 0
-- 效果显示需求
Spelldetail = 0
-- 效果 - 目标
TargetArt = "Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl"
-- 效果 - 目标附加点1
Targetattach = "origin"
-- 效果 - 目标 - 附加数量
Targetattachcount = 0
-- 是区域效果
isEffect = 0
-- 种族
race = "other"
`

slkInstance.LniRead(lniString2);
// log(slkInstance.data);
l(slkInstance.luaWrite());
l(slkInstance.LniWrite());

let luaString = `

{
    Area = "0.0", --影响区域
    Art = "ReplaceableTextures\CommandButtons\BTNReturnGoods.blp", --图标 - 普通
    BuffID = "", --魔法效果
    Buttonpos_1 = "0", --按钮位置 - 普通 (X)
    Buttonpos_2 = "0", --按钮位置 - 普通 (Y)
    Cast = "0.0", --魔法施放时间
    Casterattachcount = "0", --效果 - 施法者 - 附加数量
    Cool = "0.0", --魔法施放时间间隔
    Cost = "0", --魔法消耗
    DataA = "50", --黄金消耗
    DataB = "0", --木材消耗
    DataE = "neutralspell", --基础命令ID
    DataF = "1", --向技能拥有者收费
    Dur = "0.0", --持续时间 - 普通
    EfctID = "", --区域持续效果
    HeroDur = "0.0", --持续时间 - 英雄
    Hotkey = "G", --热键 - 普通
    MissileHoming = "0", --效果 - 射弹自导允许
    Missilearc = "0.0", --效果 - 射弹弧度
    Missilespeed = "0", --效果 - 射弹速度
    Name = "收费", --名字
    Researchbuttonpos_1 = "0", --按钮位置 - 研究 (X)
    Researchbuttonpos_2 = "0", --按钮位置 - 研究 (Y)
    Rng = "0.0", --施法距离
    Targetattachcount = "0", --效果 - 目标 - 附加数量
    Tip = "收费( |cffffcc00G|r)", --提示工具 - 普通
    Ubertip = "向某个玩家收取固定数额的金子和木材。", --提示工具 - 普通 - 扩展
    UnButtonpos_1 = "0", --按钮位置 - 关闭 (X)
    UnButtonpos_2 = "0", --按钮位置 - 关闭 (Y)
    checkDep = "1", --检查等价所属
    hero = "0", --英雄技能
    item = "0", --物品技能
    levelSkip = "0", --跳级要求
    levels = "1", --等级
    priority = "0", --魔法偷取优先权
    race = "creeps", --种族
    reqLevel = "0", --等级要求
    DataC = "1", --远程奖励
    DataD = "0", --使用指定数值奖励
    TargetArt = "Abilities\Spells\Orc\WarDrums\DrumsCasterHeal.mdl", --效果 - 目标
    Targetattach = "origin", --效果 - 目标附加点1
    EditorSuffix = "(中立但是带有敌意)", --编辑器后缀
    Order = "animatedead", --命令串 - 使用/打开
    SpecialArt = "Abilities\Spells\Undead\AnimateDead\AnimateDeadTarget.mdl", --效果 -特殊
    Requires = "Ruba", --需求
    Orderoff = "bloodlustoff", --命令串 - 取消激活
    Orderon = "bloodluston", --命令串 - 激活
    Unart = "ReplaceableTextures\CommandButtons\BTNBloodLustOff.blp", --图标 -关闭
    Unhotkey = "B", --热键 -关闭
    Untip = "|cffc3dbff点击右键以激活自动施放功能。|r", --提示工具 -关闭
    Unubertip = "|cffc3dbff点击右键以取消自动施放功能。|r", --提示工具 -关闭 - 扩展
    Animnames = "spell,slam", --效果 - 施法动作
    Missileart = "Abilities\Spells\Other\BreathOfFire\BreathOfFireMissile.mdl", --效果 - 投射物图像
    ResearchArt = "ReplaceableTextures\CommandButtons\BTNFireForTheCannon.blp", --图标 - 学习
    UnitID = "ndr1", --召唤单位类型
    Specialattach = "chest", --效果 -特殊附加点
    LightningEffect = "CLPB,CLSB", --效果 - 闪电效果
    DataG = "0.0", --生命值奖励衰减
    DataH = "0.0", --魔法值奖励参数
    DataI = "0.0", --魔法值奖励衰减
    Effectsoundlooped = "DrainLoop", --音效(循环)
    Unorder = "undivineshield", --命令串 - 关闭
    Researchhotkey = "F", --热键 - 学习
    Researchtip = "学习痛苦之指(|cffffcc00F|r)", --提示工具 - 学习
    Researchubertip = "能残忍地杀害敌人的单位或者猛烈地破坏敌人的建筑物。", --提示工具 - 学习 - 扩展
    EffectArt = "Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl", --效果 - 目标点
    Effectsound = "InnerFireCast", --音效
    CasterArt = "Abilities\Spells\NightElf\BattleRoar\RoarCaster.mdl", --效果 - 施法者
    Casterattach = "overhead", --效果 - 施法者附加点1
    Areaeffectart = "Abilities\Spells\NightElf\Blink\BlinkTarget.mdl", --效果 - 区域
    Requiresamount = "2", --需求值
    Targetattach1 = "sprite,second", --效果 - 目标附加点2
    Targetattach2 = "sprite,third", --效果 - 目标附加点3
    Targetattach3 = "sprite,fourth", --效果 - 目标附加点4
    Targetattach4 = "sprite,fifth", --效果 - 目标附加点5
    Targetattach5 = "sprite,sixth", --效果 - 目标附加点6
}
`


// slkInstance.luaRead(luaString);
// log(slkInstance.data);


let luaString2= `

{
    EditorName = "群星坠落(目标)", --名字(编辑器)
    MissileHoming = "0", --效果 - 射弹自导允许
    Missilearc = "0.0", --效果 - 射弹弧度
    Missilespeed = "0", --效果 - 射弹速度
    Spelldetail = "0", --效果显示需求
    TargetArt = "Abilities\Spells\NightElf\Starfall\StarfallTarget.mdl", --效果 - 目标
    Targetattach = "origin", --效果 - 目标附加点1
    Targetattachcount = "0", --效果 - 目标 - 附加数量
    isEffect = "0", --是区域效果
    Buffart = "ReplaceableTextures\CommandButtons\BTNBreathOfFrost.blp", --图标
    Bufftip = "霜冻闪电", --工具提示
    Buffubertip = "该单位遭到了霜冻闪电的攻击，因此会持续地受到伤害。", --工具提示 - 扩展
    SpecialArt = "Abilities\Spells\NightElf\ThornsAura\ThornsAuraDamage.mdl", --效果 -特殊
    Specialattach = "head", --效果 -特殊附加点
    EffectArt = "Abilities\Spells\Orc\FeralSpirit\feralspiritdone.mdl", --效果 - 点目标
    Effectsoundlooped = "BanishLoop", --声音效果(循环)
    EditorSuffix = "(没有堆积)", --编辑器后缀
    Targetattach1 = "origin", --效果 - 目标附加点2
    Targetattach2 = "chest,mount,left", --效果 - 目标附加点3
    Targetattach3 = "chest,mount,right", --效果 - 目标附加点4
    Missileart = "Abilities\Weapons\LavaSpawnMissile\LavaSpawnBirthMissile.mdl", --效果 - 投射物图像
    Effectsound = "SoulPreservation", --声音效果
    Effectattach = "sprite,first", --效果 - 点目标附加点
    LightningEffect = "MFPB", --效果 - 闪电效果
    Targetattach4 = "sprite,fourth", --效果 - 目标附加点5
    Targetattach5 = "sprite,sixth", --效果 - 目标附加点6
}


{
    EditorName = "群星坠落(目标)", --名字(编辑器)
    MissileHoming = "0", --效果 - 射弹自导允许
    Missilearc = "0.0", --效果 - 射弹弧度
    Missilespeed = "0", --效果 - 射弹速度
    Spelldetail = "0", --效果显示需求
    TargetArt = "Abilities\Spells\NightElf\Starfall\StarfallTarget.mdl", --效果 - 目标
    Targetattach = "origin", --效果 - 目标附加点1
    Targetattachcount = "0", --效果 - 目标 - 附加数量
    isEffect = "0", --是区域效果
    Buffart = "ReplaceableTextures\CommandButtons\BTNBreathOfFrost.blp", --图标
    Bufftip = "霜冻闪电", --工具提示
    Buffubertip = "该单位遭到了霜冻闪电的攻击，因此会持续地受到伤害。", --工具提示 - 扩展
    SpecialArt = "Abilities\Spells\NightElf\ThornsAura\ThornsAuraDamage.mdl", --效果 -特殊
    Specialattach = "head", --效果 -特殊附加点
    EffectArt = "Abilities\Spells\Orc\FeralSpirit\feralspiritdone.mdl", --效果 - 点目标
    Effectsoundlooped = "BanishLoop", --声音效果(循环)
    EditorSuffix = "(没有堆积)", --编辑器后缀
    Targetattach1 = "origin", --效果 - 目标附加点2
    Targetattach2 = "chest,mount,left", --效果 - 目标附加点3
    Targetattach3 = "chest,mount,right", --效果 - 目标附加点4
    Missileart = "Abilities\Weapons\LavaSpawnMissile\LavaSpawnBirthMissile.mdl", --效果 - 投射物图像
    Effectsound = "SoulPreservation", --声音效果
    Effectattach = "sprite,first", --效果 - 点目标附加点
    LightningEffect = "MFPB", --效果 - 闪电效果
    Targetattach4 = "sprite,fourth", --效果 - 目标附加点5
    Targetattach5 = "sprite,sixth", --效果 - 目标附加点6
}


{
    EditorName = "群星坠落(目标)", --名字(编辑器)
    MissileHoming = "0", --效果 - 射弹自导允许
    Missilearc = "0.0", --效果 - 射弹弧度
    Missilespeed = "0", --效果 - 射弹速度
    Spelldetail = "0", --效果显示需求
    TargetArt = "Abilities\Spells\NightElf\Starfall\StarfallTarget.mdl", --效果 - 目标
    Targetattach = "origin", --效果 - 目标附加点1
    Targetattachcount = "0", --效果 - 目标 - 附加数量
    isEffect = "0", --是区域效果
    Buffart = "ReplaceableTextures\CommandButtons\BTNBreathOfFrost.blp", --图标
    Bufftip = "霜冻闪电", --工具提示
    Buffubertip = "该单位遭到了霜冻闪电的攻击，因此会持续地受到伤害。", --工具提示 - 扩展
    SpecialArt = "Abilities\Spells\NightElf\ThornsAura\ThornsAuraDamage.mdl", --效果 -特殊
    Specialattach = "head", --效果 -特殊附加点
    EffectArt = "Abilities\Spells\Orc\FeralSpirit\feralspiritdone.mdl", --效果 - 点目标
    Effectsoundlooped = "BanishLoop", --声音效果(循环)
    EditorSuffix = "(没有堆积)", --编辑器后缀
    Targetattach1 = "origin", --效果 - 目标附加点2
    Targetattach2 = "chest,mount,left", --效果 - 目标附加点3
    Targetattach3 = "chest,mount,right", --效果 - 目标附加点4
    Missileart = "Abilities\Weapons\LavaSpawnMissile\LavaSpawnBirthMissile.mdl", --效果 - 投射物图像
    Effectsound = "SoulPreservation", --声音效果
    Effectattach = "sprite,first", --效果 - 点目标附加点
    LightningEffect = "MFPB", --效果 - 闪电效果
    Targetattach4 = "sprite,fourth", --效果 - 目标附加点5
    Targetattach5 = "sprite,sixth", --效果 - 目标附加点6
}


{
    EditorName = "群星坠落(目标)", --名字(编辑器)
    MissileHoming = "0", --效果 - 射弹自导允许
    Missilearc = "0.0", --效果 - 射弹弧度
    Missilespeed = "0", --效果 - 射弹速度
    Spelldetail = "0", --效果显示需求
    TargetArt = "Abilities\Spells\NightElf\Starfall\StarfallTarget.mdl", --效果 - 目标
    Targetattach = "origin", --效果 - 目标附加点1
    Targetattachcount = "0", --效果 - 目标 - 附加数量
    isEffect = "0", --是区域效果
    Buffart = "ReplaceableTextures\CommandButtons\BTNBreathOfFrost.blp", --图标
    Bufftip = "霜冻闪电", --工具提示
    Buffubertip = "该单位遭到了霜冻闪电的攻击，因此会持续地受到伤害。", --工具提示 - 扩展
    SpecialArt = "Abilities\Spells\NightElf\ThornsAura\ThornsAuraDamage.mdl", --效果 -特殊
    Specialattach = "head", --效果 -特殊附加点
    EffectArt = "Abilities\Spells\Orc\FeralSpirit\feralspiritdone.mdl", --效果 - 点目标
    Effectsoundlooped = "BanishLoop", --声音效果(循环)
    EditorSuffix = "(没有堆积)", --编辑器后缀
    Targetattach1 = "origin", --效果 - 目标附加点2
    Targetattach2 = "chest,mount,left", --效果 - 目标附加点3
    Targetattach3 = "chest,mount,right", --效果 - 目标附加点4
    Missileart = "Abilities\Weapons\LavaSpawnMissile\LavaSpawnBirthMissile.mdl", --效果 - 投射物图像
    Effectsound = "SoulPreservation", --声音效果
    Effectattach = "sprite,first", --效果 - 点目标附加点
    LightningEffect = "MFPB", --效果 - 闪电效果
    Targetattach4 = "sprite,fourth", --效果 - 目标附加点5
    Targetattach5 = "sprite,sixth", --效果 - 目标附加点6
}


{
    EditorName = "群星坠落(目标)", --名字(编辑器)
    MissileHoming = "0", --效果 - 射弹自导允许
    Missilearc = "0.0", --效果 - 射弹弧度
    Missilespeed = "0", --效果 - 射弹速度
    Spelldetail = "0", --效果显示需求
    TargetArt = "Abilities\Spells\NightElf\Starfall\StarfallTarget.mdl", --效果 - 目标
    Targetattach = "origin", --效果 - 目标附加点1
    Targetattachcount = "0", --效果 - 目标 - 附加数量
    isEffect = "0", --是区域效果
    Buffart = "ReplaceableTextures\CommandButtons\BTNBreathOfFrost.blp", --图标
    Bufftip = "霜冻闪电", --工具提示
    Buffubertip = "该单位遭到了霜冻闪电的攻击，因此会持续地受到伤害。", --工具提示 - 扩展
    SpecialArt = "Abilities\Spells\NightElf\ThornsAura\ThornsAuraDamage.mdl", --效果 -特殊
    Specialattach = "head", --效果 -特殊附加点
    EffectArt = "Abilities\Spells\Orc\FeralSpirit\feralspiritdone.mdl", --效果 - 点目标
    Effectsoundlooped = "BanishLoop", --声音效果(循环)
    EditorSuffix = "(没有堆积)", --编辑器后缀
    Targetattach1 = "origin", --效果 - 目标附加点2
    Targetattach2 = "chest,mount,left", --效果 - 目标附加点3
    Targetattach3 = "chest,mount,right", --效果 - 目标附加点4
    Missileart = "Abilities\Weapons\LavaSpawnMissile\LavaSpawnBirthMissile.mdl", --效果 - 投射物图像
    Effectsound = "SoulPreservation", --声音效果
    Effectattach = "sprite,first", --效果 - 点目标附加点
    LightningEffect = "MFPB", --效果 - 闪电效果
    Targetattach4 = "sprite,fourth", --效果 - 目标附加点5
    Targetattach5 = "sprite,sixth", --效果 - 目标附加点6
}

`


// slkInstance.luaRead(luaString2);
// log(slkInstance.data);

// l(slkInstance.luaWrite());
// l(slkInstance.LniWrite())